[
  {
    "title": "POST - /registration",
    "path": "/registration",
    "method": "POST",
    "description": "Метод для создания пользователя.",
    "request": {
      "description": "Принимает JSON-объект с полями:",
      "fields": [
        {
          "name": "firstName",
          "type": "string",
          "required": true,
          "description": "Имя пользователя."
        },
        {
          "name": "lastName",
          "type": "string",
          "required": true,
          "description": "Фамилия пользователя."
        },
        {
          "name": "email",
          "type": "string",
          "required": true,
          "description": "Адрес электронной почты пользователя."
        },
        {
          "name": "password",
          "type": "string",
          "required": true,
          "description": "Пароль от аккаунта пользователя."
        }
      ]
    },
    "response": {
      "description": "Возвращает JSON-объект с полями:",
      "fields": [
        {
          "name": "id",
          "type": "integer",
          "description": "Идентификатор аккаунта пользователя."
        },
        {
          "name": "firstName",
          "type": "string",
          "description": "Имя пользователя."
        },
        {
          "name": "lastName",
          "type": "string",
          "description": "Фамилия пользователя."
        },
        {
          "name": "email",
          "type": "string",
          "description": "Адрес электронной почты пользователя."
        }
      ]
    },
    "statuses": [
      {
        "code": 201,
        "description": "Запрос успешно выполнен."
      },
      {
        "code": 400,
        "description": "Отсутствуют обязательные поля в теле запроса или они пусты или содержат только пробелы; некорректный адрес электронной почты."
      },
      {
        "code": 403,
        "description": "Запрос от авторизованного аккаунта."
      },
      {
        "code": 409,
        "description": "Аккаунт с таким адресом электронной почты уже существует."
      }
    ],
    "example_request": {
      "firstName": "John",
      "lastName": "Doe",
      "email": "john.doe@example.com",
      "password": "password123"
    },
    "example_response": {
      "id": 123,
      "firstName": "John",
      "lastName": "Doe",
      "email": "john.doe@example.com"
    }
  },
  {
    "title": "POST - /login",
    "path": "/login",
    "method": "POST",
    "description": "Метод для аутентификации пользователя.",
    "request": {
      "description": "Принимает JSON-объект с полями:",
      "fields": [
        {
          "name": "email",
          "type": "string",
          "required": true,
          "description": "Адрес электронной почты пользователя."
        },
        {
          "name": "password",
          "type": "string",
          "required": true,
          "description": "Пароль от аккаунта пользователя."
        }
      ]
    },
    "response": {
      "description": "Возвращает JSON-объект с полем:",
      "fields": [
        {
          "name": "id",
          "type": "integer",
          "description": "Идентификатор аккаунта пользователя."
        }
      ]
    },
    "statuses": [
      {
        "code": 200,
        "description": "Запрос успешно выполнен."
      },
      {
        "code": 400,
        "description": "Отсутствуют обязательные поля email или password в теле запроса."
      },
      {
        "code": 401,
        "description": "Неверный email или пароль."
      }
    ],
    "example_request": {
      "email": "john.doe@example.com",
      "password": "password123"
    },
    "example_response": {
      "id": 123
    }
  },
  {
    "title": "GET - /accounts/{accountId}",
    "path": "/accounts/{accountId}",
    "method": "GET",
    "description": "Аккаунт пользователя",
    "request": {
      "description": "Не принимает тело запроса."
    },
    "response": {
      "description": "Возвращает JSON-объект с полями:",
      "fields": [
        {
          "name": "id",
          "type": "integer",
          "description": "Идентификатор аккаунта пользователя."
        },
        {
          "name": "firstName",
          "type": "string",
          "description": "Имя пользователя."
        },
        {
          "name": "lastName",
          "type": "string",
          "description": "Фамилия пользователя."
        },
        {
          "name": "email",
          "type": "string",
          "description": "Адрес электронной почты."
        }
      ]
    },
    "statuses": [
      {
        "code": 200,
        "description": "Запрос успешно выполнен."
      },
      {
        "code": 400,
        "description": "Некорректный идентификатор accountId."
      },
      {
        "code": 401,
        "description": "Неверные авторизационные данные."
      },
      {
        "code": 404,
        "description": "Аккаунт с указанным accountId не найден."
      }
    ],
    "example_request": "GET /accounts/123 HTTP/1.1",
    "example_response": "{\n  \"id\": 123,\n  \"firstName\": \"John\",\n  \"lastName\": \"Doe\",\n  \"email\": \"john.doe@example.com\"\n}"
  },
  {
    "title": "GET - /accounts/search",
    "path": "/accounts/search",
    "method": "GET",
    "description": "Поиск аккаунта",
    "request": {
      "description": "Принимает параметры запроса:",
      "fields": [
        {
          "name": "firstName",
          "type": "string",
          "required": false,
          "description": "Имя пользователя, по которому будет производиться поиск. Может использоваться только часть имени без учета регистра. Если параметр отсутствует, не участвует в фильтрации."
        },
        {
          "name": "lastName",
          "type": "string",
          "required": false,
          "description": "Фамилия пользователя, по которой будет производиться поиск. Может использоваться только часть фамилии без учета регистра. Если параметр отсутствует, не участвует в фильтрации."
        },
        {
          "name": "email",
          "type": "string",
          "required": false,
          "description": "Адрес электронной почты пользователя, по которому будет производиться поиск. Может использоваться только часть адреса электронной почты без учета регистра. Если параметр отсутствует, не участвует в фильтрации."
        },
        {
          "name": "from",
          "type": "integer",
          "required": false,
          "description": "Количество элементов, которое необходимо пропустить для формирования страницы с результатами (по умолчанию 0)."
        },
        {
          "name": "size",
          "type": "integer",
          "required": false,
          "description": "Количество элементов на странице (по умолчанию 10)."
        }
      ]
    },
    "response": {
      "description": "Возвращает массив JSON-объектов с полями:",
      "fields": [
        {
          "name": "id",
          "type": "integer",
          "description": "Идентификатор аккаунта пользователя."
        },
        {
          "name": "firstName",
          "type": "string",
          "description": "Имя пользователя."
        },
        {
          "name": "lastName",
          "type": "string",
          "description": "Фамилия пользователя."
        },
        {
          "name": "email",
          "type": "string",
          "description": "Адрес электронной почты."
        }
      ]
    },
    "statuses": [
      {
        "code": 200,
        "description": "Запрос успешно выполнен."
      },
      {
        "code": 400,
        "description": "Ошибка в параметрах запроса (from < 0 или size <= 0)."
      },
      {
        "code": 401,
        "description": "Неверные авторизационные данные."
      }
    ],
    "example_request": "GET /accounts/search?firstName=John&lastName=Doe&email=john.doe@example.com&from=0&size=10 HTTP/1.1",
    "example_response": "[\n  {\n    \"id\": 123,\n    \"firstName\": \"John\",\n    \"lastName\": \"Doe\",\n    \"email\": \"john.doe@example.com\"\n  },\n  {\n    \"id\": 456,\n    \"firstName\": \"John\",\n    \"lastName\": \"Smith\",\n    \"email\": \"john.smith@example.com\"\n  }\n]"
  },
  {
    "title": "PUT - /accounts/{accountId}",
    "path": "/accounts/{accountId}",
    "method": "PUT",
    "description": "Изменение аккаунта",
    "request": {
      "description": "Принимает JSON-объект с полями:",
      "fields": [
        {
          "name": "firstName",
          "type": "string",
          "required": true,
          "description": "Новое имя пользователя."
        },
        {
          "name": "lastName",
          "type": "string",
          "required": true,
          "description": "Новая фамилия пользователя."
        },
        {
          "name": "email",
          "type": "string",
          "required": true,
          "description": "Новый адрес электронной почты пользователя."
        },
        {
          "name": "password",
          "type": "string",
          "required": true,
          "description": "Пароль от аккаунта пользователя."
        }
      ]
    },
    "response": {
      "description": "Возвращает JSON-объект с полями:",
      "fields": [
        {
          "name": "id",
          "type": "integer",
          "description": "Идентификатор аккаунта пользователя."
        },
        {
          "name": "firstName",
          "type": "string",
          "description": "Новое имя пользователя."
        },
        {
          "name": "lastName",
          "type": "string",
          "description": "Новая фамилия пользователя."
        },
        {
          "name": "email",
          "type": "string",
          "description": "Новый адрес электронной почты."
        }
      ]
    },
    "statuses": [
      {
        "code": 200,
        "description": "Запрос успешно выполнен."
      },
      {
        "code": 400,
        "description": "Отсутствуют обязательные поля (firstName, lastName, email или password) или они пусты. Неверный формат email."
      },
      {
        "code": 401,
        "description": "Неверные авторизационные данные."
      },
      {
        "code": 403,
        "description": "Обновление не своего аккаунта."
      },
      {
        "code": 404,
        "description": "Аккаунт не найден."
      },
      {
        "code": 409,
        "description": "Аккаунт с таким email уже существует."
      }
    ],
    "example_request": "PUT /accounts/123 HTTP/1.1\nContent-Type: application/json\n\n{\n  \"firstName\": \"John\",\n  \"lastName\": \"Doe\",\n  \"email\": \"john.doe@example.com\",\n  \"password\": \"newpassword123\"\n}",
    "example_response": "{\n  \"id\": 123,\n  \"firstName\": \"John\",\n  \"lastName\": \"Doe\",\n  \"email\": \"john.doe@example.com\"\n}"
  },
  {
    "title": "DELETE - /accounts/{accountId}",
    "path": "/accounts/{accountId}",
    "method": "DELETE",
    "description": "Удаление аккаунта",
    "request": {
      "description": "Принимает пустое тело запроса."
    },
    "response": {
      "description": "Возвращает пустое тело ответа."
    },
    "statuses": [
      {
        "code": 200,
        "description": "Запрос успешно выполнен."
      },
      {
        "code": 400,
        "description": "Некорректный идентификатор аккаунта (accountId равен null или меньше или равен 0)."
      },
      {
        "code": 401,
        "description": "Неверные авторизационные данные."
      },
      {
        "code": 403,
        "description": "Удаление не своего аккаунта."
      },
      {
        "code": 404,
        "description": "Аккаунт с указанным accountId не найден."
      }
    ],
    "example_request": "DELETE /accounts/123 HTTP/1.1",
    "example_response": "HTTP/1.1 200 OK\nContent-Length: 0"
  },
  {
    "title": "GET - /region/{regionId}",
    "path": "/region/{regionId}",
    "method": "GET",
    "description": "Получение информации о регионе",
    "request": {
      "description": "Принимает пустое тело запроса."
    },
    "response": {
      "description": "Возвращает информацию о регионе в формате JSON:",
      "fields": [
        {
          "name": "id",
          "type": "integer",
          "description": "Идентификатор региона."
        },
        {
          "name": "regionType",
          "type": "integer",
          "description": "Идентификатор типа региона."
        },
        {
          "name": "accountId",
          "type": "integer",
          "description": "Идентификатор аккаунта, внесшего данные о регионе."
        },
        {
          "name": "name",
          "type": "string",
          "description": "Название региона."
        },
        {
          "name": "parentRegion",
          "type": "string",
          "description": "Название родительского региона."
        },
        {
          "name": "latitude",
          "type": "float",
          "description": "Координаты широты."
        },
        {
          "name": "longitude",
          "type": "float",
          "description": "Координаты долготы."
        }
      ]
    },
    "statuses": [
      {
        "code": 200,
        "description": "Запрос успешно выполнен."
      },
      {
        "code": 400,
        "description": "Некорректный идентификатор региона (regionId равен null или меньше или равен 0)."
      },
      {
        "code": 401,
        "description": "Неверные авторизационные данные."
      },
      {
        "code": 404,
        "description": "Регион с указанным regionId не найден."
      }
    ],
    "example_request": "GET /region/123 HTTP/1.1",
    "example_response": "{\n  \"id\": 123,\n  \"regionType\": 456,\n  \"accountId\": 789,\n  \"name\": \"Название региона\",\n  \"parentRegion\": \"Название родительского региона\",\n  \"latitude\": 55.123456,\n  \"longitude\": 37.654321\n}"
  },
  {
    "title": "POST - /region",
    "path": "/region",
    "method": "POST",
    "description": "Создание региона",
    "request": {
      "description": "Принимает JSON-объект с полями:",
      "fields": [
        {
          "name": "name",
          "type": "string",
          "required": true,
          "description": "Название региона."
        },
        {
          "name": "latitude",
          "type": "float",
          "required": true,
          "description": "Координаты широты."
        },
        {
          "name": "longitude",
          "type": "float",
          "required": true,
          "description": "Координаты долготы."
        },
        {
          "name": "regionType",
          "type": "integer",
          "required": false,
          "description": "Идентификатор типа региона."
        },
        {
          "name": "parentRegion",
          "type": "string",
          "required": false,
          "description": "Название родительского региона."
        }
      ]
    },
    "response": {
      "description": "Возвращает информацию о созданном регионе в формате JSON:",
      "fields": [
        {
          "name": "id",
          "type": "integer",
          "description": "Идентификатор созданного региона."
        },
        {
          "name": "name",
          "type": "string",
          "description": "Название региона."
        },
        {
          "name": "parentRegion",
          "type": "string",
          "description": "Название родительского региона (если указано)."
        },
        {
          "name": "regionType",
          "type": "integer",
          "description": "Идентификатор типа региона (если указан)."
        },
        {
          "name": "latitude",
          "type": "float",
          "description": "Координаты широты."
        },
        {
          "name": "longitude",
          "type": "float",
          "description": "Координаты долготы."
        }
      ]
    },
    "statuses": [
      {
        "code": 201,
        "description": "Запрос успешно выполнен и регион создан."
      },
      {
        "code": 400,
        "description": "Отсутствуют обязательные поля в теле запроса (name, latitude, longitude)."
      },
      {
        "code": 401,
        "description": "Неверные авторизационные данные."
      },
      {
        "code": 404,
        "description": "Тип региона или родительский регион не найдены."
      },
      {
        "code": 409,
        "description": "Регион с указанными координатами уже существует."
      }
    ],
    "example_request": "POST /region HTTP/1.1\nContent-Type: application/json\n\n{\n  \"name\": \"Название региона\",\n  \"latitude\": 55.123456,\n  \"longitude\": 37.654321\n}",
    "example_response": "{\n  \"id\": 123,\n  \"name\": \"Название региона\",\n  \"parentRegion\": \"Название родительского региона\",\n  \"regionType\": 456,\n  \"latitude\": 55.123456,\n  \"longitude\": 37.654321\n}"
  },
  {
    "title": "PUT - /region/{regionId}",
    "path": "/region/{regionId}",
    "method": "PUT",
    "description": "Изменение региона",
    "request": {
      "description": "Принимает JSON-объект с полями:",
      "fields": [
        {
          "name": "name",
          "type": "string",
          "required": true,
          "description": "Новое название региона."
        },
        {
          "name": "latitude",
          "type": "float",
          "required": true,
          "description": "Новые координаты широты."
        },
        {
          "name": "longitude",
          "type": "float",
          "required": true,
          "description": "Новые координаты долготы."
        },
        {
          "name": "regionType",
          "type": "integer",
          "required": false,
          "description": "Новый идентификатор типа региона."
        },
        {
          "name": "parentRegion",
          "type": "string",
          "required": false,
          "description": "Новое название родительского региона."
        }
      ]
    },
    "response": {
      "description": "Возвращает информацию о измененном регионе в формате JSON:",
      "fields": [
        {
          "name": "id",
          "type": "integer",
          "description": "Идентификатор измененного региона."
        },
        {
          "name": "name",
          "type": "string",
          "description": "Новое название региона."
        },
        {
          "name": "parentRegion",
          "type": "string",
          "description": "Новое название родительского региона (если указано)."
        },
        {
          "name": "latitude",
          "type": "float",
          "description": "Новые координаты широты."
        },
        {
          "name": "longitude",
          "type": "float",
          "description": "Новые координаты долготы."
        }
      ]
    },
    "statuses": [
      {
        "code": 200,
        "description": "Запрос успешно выполнен и регион изменен."
      },
      {
        "code": 400,
        "description": "Отсутствуют обязательные поля в теле запроса (name, latitude, longitude)."
      },
      {
        "code": 401,
        "description": "Неверные авторизационные данные."
      },
      {
        "code": 404,
        "description": "Регион с указанным идентификатором не найден."
      },
      {
        "code": 409,
        "description": "Регион с указанными координатами уже существует."
      }
    ],
    "example_request": "PUT /region/{123} HTTP/1.1\nContent-Type: application/json\n\n{\n  \"name\": \"Новое название региона\",\n  \"latitude\": 55.123456,\n  \"longitude\": 37.654321\n}",
    "example_response": "{\n  \"id\": 123,\n  \"name\": \"Новое название региона\",\n  \"parentRegion\": \"Новое название родительского региона\",\n  \"latitude\": 55.123456,\n  \"longitude\": 37.654321\n}"
  },
  {
    "title": "DELETE - /region/{regionId}",
    "path": "/region/{regionId}",
    "method": "DELETE",
    "description": "Удаление региона",
    "request": {
      "description": "Не принимает тело запроса."
    },
    "response": {
      "description": "Не возвращает тело ответа."
    },
    "statuses": [
      {
        "code": 200,
        "description": "Запрос успешно выполнен и регион удален."
      },
      {
        "code": 400,
        "description": "Регион является родительским для другого региона."
      },
      {
        "code": 401,
        "description": "Неверные авторизационные данные."
      },
      {
        "code": 404,
        "description": "Регион с указанным идентификатором не найден."
      }
    ],
    "example_request": "DELETE /region/{123} HTTP/1.1\nAuthorization: Bearer {token}",
    "example_response": "{}"
  },
  {
    "title": "GET - /region/types/{typeId}",
    "path": "/region/types/{typeId}",
    "method": "GET",
    "description": "Получение информации о типе региона",
    "request": {
      "description": "Принимает запрос без тела."
    },
    "response": {
      "description": "Возвращает информацию о типе региона в формате JSON:",
      "fields": [
        {
          "name": "id",
          "type": "integer",
          "description": "Идентификатор типа региона."
        },
        {
          "name": "type",
          "type": "string",
          "description": "Тип региона."
        }
      ]
    },
    "statuses": [
      {
        "code": 200,
        "description": "Запрос успешно выполнен и информация о типе региона получена."
      },
      {
        "code": 400,
        "description": "Если тип региона не указан (typeId = null, typeId <= 0)."
      },
      {
        "code": 401,
        "description": "Неверные авторизационные данные."
      },
      {
        "code": 404,
        "description": "Тип региона с указанным идентификатором не найден."
      }
    ],
    "example_request": "GET /region/types/{123} HTTP/1.1",
    "example_response": "{\n  \"id\": 123,\n  \"type\": \"Название типа региона\"\n}"
  },
  {
    "title": "POST - /region/types",
    "path": "/region/types",
    "method": "POST",
    "description": "Добавление типа региона",
    "request": {
      "description": "Принимает JSON-объект с полем:",
      "fields": [
        {
          "name": "type",
          "type": "string",
          "required": true,
          "description": "Тип региона."
        }
      ]
    },
    "response": {
      "description": "Возвращает информацию о добавленном типе региона в формате JSON:",
      "fields": [
        {
          "name": "id",
          "type": "integer",
          "description": "Идентификатор добавленного типа региона."
        },
        {
          "name": "type",
          "type": "string",
          "description": "Тип региона."
        }
      ]
    },
    "statuses": [
      {
        "code": 201,
        "description": "Запрос успешно выполнен и тип региона добавлен."
      },
      {
        "code": 400,
        "description": "Отсутствует или пусто поле \"type\" в теле запроса."
      },
      {
        "code": 401,
        "description": "Неверные авторизационные данные."
      },
      {
        "code": 409,
        "description": "Тип региона с указанным именем уже существует."
      }
    ],
    "example_request": "POST /region/types HTTP/1.1\nContent-Type: application/json\n\n{\n  \"type\": \"Название типа региона\"\n}",
    "example_response": "{\n  \"id\": 123,\n  \"type\": \"Название типа региона\"\n}"
  },
  {
    "title": "PUT - /region/types/{typeId}",
    "path": "/region/types/{typeId}",
    "method": "PUT",
    "description": "Изменение типа региона",
    "request": {
      "description": "Принимает JSON-объект с полем:",
      "fields": [
        {
          "name": "type",
          "type": "string",
          "required": true,
          "description": "Новый тип региона."
        }
      ]
    },
    "response": {
      "description": "Возвращает информацию об измененном типе региона в формате JSON:",
      "fields": [
        {
          "name": "id",
          "type": "integer",
          "description": "Идентификатор измененного типа региона."
        },
        {
          "name": "type",
          "type": "string",
          "description": "Новый тип региона."
        }
      ]
    },
    "statuses": [
      {
        "code": 200,
        "description": "Запрос успешно выполнен и тип региона изменен."
      },
      {
        "code": 400,
        "description": "Идентификатор типа региона некорректный (typeId <= 0) или отсутствует поле \"type\" в теле запроса."
      },
      {
        "code": 401,
        "description": "Неверные авторизационные данные."
      },
      {
        "code": 404,
        "description": "Тип региона с указанным идентификатором не найден."
      },
      {
        "code": 409,
        "description": "Тип региона с указанным именем уже существует."
      }
    ],
    "example_request": "PUT /region/types/{123} HTTP/1.1\nContent-Type: application/json\n\n{\n  \"type\": \"Новый тип региона\"\n}",
    "example_response": "{\n  \"id\": 123,\n  \"type\": \"Новый тип региона\"\n}"
  },
  {
    "title": "DELETE - /region/types/{typeId}",
    "path": "/region/types/{typeId}",
    "method": "DELETE",
    "description": "Удаление типа региона",
    "request": {
      "description": "Отправляет пустое тело запроса."
    },
    "response": {
      "description": "Отправляет пустое тело ответа."
    },
    "statuses": [
      {
        "code": 200,
        "description": "Запрос успешно выполнен и тип региона удален."
      },
      {
        "code": 400,
        "description": "Идентификатор типа региона некорректный (typeId <= 0) или есть регионы с этим типом."
      },
      {
        "code": 401,
        "description": "Неверные авторизационные данные."
      },
      {
        "code": 404,
        "description": "Тип региона с указанным идентификатором не найден."
      }
    ],
    "example_request": "DELETE /region/types/{123} HTTP/1.1",
    "example_response": "{}"
  },
  {
    "title": "GET - /region/weather/{regionId}",
    "path": "/region/weather/{regionId}",
    "method": "GET",
    "description": "Получение информации о погоде в регионе",
    "request": {
      "description": "Отправляет пустое тело запроса."
    },
    "response": {
      "description": "Возвращает информацию о погоде в указанном регионе в формате JSON:",
      "fields": [
        {
          "name": "id",
          "type": "integer",
          "description": "Идентификатор региона."
        },
        {
          "name": "regionName",
          "type": "string",
          "description": "Название региона."
        },
        {
          "name": "temperature",
          "type": "number",
          "description": "Температура в регионе, °C."
        },
        {
          "name": "humidity",
          "type": "number",
          "description": "Влажность воздуха в регионе, %."
        },
        {
          "name": "windSpeed",
          "type": "number",
          "description": "Скорость ветра, м/с."
        },
        {
          "name": "weatherCondition",
          "type": "string",
          "description": "Текущее состояние погоды. Возможные значения: \"CLEAR\", \"CLOUDY\", \"RAIN\", \"SNOW\", \"FOG\", \"STORM\"."
        },
        {
          "name": "precipitationAmount",
          "type": "number",
          "description": "Количество осадков, мм."
        },
        {
          "name": "measurementDateTime",
          "type": "string",
          "description": "Дата и время измерения погодных условий в формате ISO-8601."
        },
        {
          "name": "weatherForecast",
          "type": "array",
          "description": "Массив идентификаторов объектов с прогнозом погоды на ближайшие дни."
        }
      ]
    },
    "statuses": [
      {
        "code": 200,
        "description": "Запрос успешно выполнен и информация о погоде в регионе получена."
      },
      {
        "code": 400,
        "description": "Идентификатор региона некорректный (regionId <= 0)."
      },
      {
        "code": 401,
        "description": "Неверные авторизационные данные."
      },
      {
        "code": 404,
        "description": "Регион с указанным идентификатором не найден или прогноз погоды для данного региона не найден."
      }
    ],
    "example_request": "GET /region/weather/{123} HTTP/1.1",
    "example_response": "{\n  \"id\": 123,\n  \"regionName\": \"Название региона\",\n  \"temperature\": 20.5,\n  \"humidity\": 70.0,\n  \"windSpeed\": 3.5,\n  \"weatherCondition\": \"CLOUDY\",\n  \"precipitationAmount\": 0.0,\n  \"measurementDateTime\": \"2024-04-14T12:30:00Z\",\n  \"weatherForecast\": [\n    456,\n    789\n  ]\n}"
  },
  {
    "title": "GET - /region/weather/search",
    "path": "/region/weather/search",
    "method": "GET",
    "description": "Поиск информации о погоде в регионе",
    "request": {
      "description": "Отправляет пустое тело запроса.",
      "fields": [
        {
          "name": "startDateTime",
          "type": "string",
          "description": "Дата и время начала периода для поиска погодных условий, в формате ISO-8601. Если null, не участвует в фильтрации."
        },
        {
          "name": "endDateTime",
          "type": "string",
          "description": "Дата и время конца периода для поиска погодных условий, в формате ISO-8601. Если null, не участвует в фильтрации."
        },
        {
          "name": "regionId",
          "type": "integer",
          "description": "Идентификатор региона, для которого ищется информация о погоде. Если null, не участвует в фильтрации."
        },
        {
          "name": "weatherCondition",
          "type": "string",
          "description": "Состояние погоды. Возможные значения: \"CLEAR\", \"CLOUDY\", \"RAIN\", \"SNOW\", \"FOG\", \"STORM\". Если null, не участвует в фильтрации."
        },
        {
          "name": "from",
          "type": "integer",
          "description": "Количество элементов, которое необходимо пропустить для формирования страницы с результатами (по умолчанию 0)."
        },
        {
          "name": "size",
          "type": "integer",
          "description": "Количество элементов на странице (по умолчанию 10)."
        }
      ]
    },
    "response": {
      "description": "Возвращает информацию о погоде в указанных параметрах в формате JSON:",
      "fields": [
        {
          "name": "id",
          "type": "integer",
          "description": "Идентификатор региона."
        },
        {
          "name": "regionName",
          "type": "string",
          "description": "Название региона."
        },
        {
          "name": "temperature",
          "type": "number",
          "description": "Температура в регионе, °C."
        },
        {
          "name": "humidity",
          "type": "number",
          "description": "Влажность воздуха в регионе, %."
        },
        {
          "name": "windSpeed",
          "type": "number",
          "description": "Скорость ветра, м/с."
        },
        {
          "name": "weatherCondition",
          "type": "string",
          "description": "Текущее состояние погоды. Возможные значения: \"CLEAR\", \"CLOUDY\", \"RAIN\", \"SNOW\", \"FOG\", \"STORM\"."
        },
        {
          "name": "precipitationAmount",
          "type": "number",
          "description": "Количество осадков, мм."
        },
        {
          "name": "measurementDateTime",
          "type": "string",
          "description": "Дата и время измерения погодных условий в формате ISO-8601."
        },
        {
          "name": "weatherForecast",
          "type": "array",
          "description": "Массив идентификаторов объектов с прогнозом погоды на ближайшие дни."
        }
      ]
    },
    "statuses": [
      {
        "code": 200,
        "description": "Запрос успешно выполнен и информация о погоде в регионе получена."
      },
      {
        "code": 400,
        "description": "Некорректные параметры запроса (например, regionId <= 0)."
      },
      {
        "code": 401,
        "description": "Неверные авторизационные данные."
      },
      {
        "code": 404,
        "description": "Регион с указанным идентификатором не найден или прогноз погоды для данного региона не найден."
      }
    ],
    "example_request": "GET /region/weather/search?startDateTime=2024-04-14T00:00:00Z&endDateTime=2024-04-15T00:00:00Z&regionId=123&weatherCondition=CLOUDY&from=0&size=10 HTTP/1.1",
    "example_response": "[\n  {\n    \"id\": 123,\n    \"regionName\": \"Название региона\",\n    \"temperature\": 20.5,\n    \"humidity\": 70.0,\n    \"windSpeed\": 3.5,\n    \"weatherCondition\": \"CLOUDY\",\n    \"precipitationAmount\": 0.0,\n    \"measurementDateTime\": \"2024-04-14T12:30:00Z\",\n    \"weatherForecast\": [\n      456,\n      789\n    ]\n  },\n  {\n    \"id\": 456,\n    \"regionName\": \"Другой регион\",\n    \"temperature\": 22.0,\n    \"humidity\": 75.0,\n    \"windSpeed\": 2.0,\n    \"weatherCondition\": \"CLOUDY\",\n    \"precipitationAmount\": 0.0,\n    \"measurementDateTime\": \"2024-04-14T12:30:00Z\",\n    \"weatherForecast\": [\n      789,\n      1011\n    ]\n  }\n]"
  },
  {
    "title": "POST - /region/weather",
    "path": "/region/weather",
    "method": "POST",
    "description": "Добавление записи о погоде в регионе",
    "request": {
      "description": "Принимает JSON-объект с полями:",
      "fields": [
        {
          "name": "regionId",
          "type": "integer",
          "description": "Идентификатор региона"
        },
        {
          "name": "temperature",
          "type": "number",
          "description": "Температура в регионе, °C"
        },
        {
          "name": "humidity",
          "type": "number",
          "description": "Влажность воздуха в регионе, %"
        },
        {
          "name": "windSpeed",
          "type": "number",
          "description": "Скорость ветра, м/с"
        },
        {
          "name": "weatherCondition",
          "type": "string",
          "description": "Текущее состояние погоды: \"CLEAR\", \"CLOUDY\", \"RAIN\", \"SNOW\", \"FOG\", \"STORM\""
        },
        {
          "name": "precipitationAmount",
          "type": "number",
          "description": "Количество осадков, мм"
        },
        {
          "name": "measurementDateTime",
          "type": "string",
          "description": "Дата и время измерения погодных условий в формате ISO-8601"
        },
        {
          "name": "weatherForecast",
          "type": "array",
          "description": "Массив идентификаторов объектов с прогнозом погоды на ближайшие дни"
        }
      ]
    },
    "response": {
      "description": "id: Уникальный идентификатор созданной записи о погоде в регионе",
      "fields": [
        {
          "name": "id",
          "type": "integer",
          "description": "Уникальный идентификатор созданной записи о погоде в регионе"
        },
        {
          "name": "temperature",
          "type": "number",
          "description": "Температура в регионе, °C"
        },
        {
          "name": "humidity",
          "type": "number",
          "description": "Влажность воздуха в регионе, %"
        },
        {
          "name": "windSpeed",
          "type": "number",
          "description": "Скорость ветра, м/с"
        },
        {
          "name": "weatherCondition",
          "type": "string",
          "description": "Текущее состояние погоды: \"CLEAR\", \"CLOUDY\", \"RAIN\", \"SNOW\", \"FOG\", \"STORM\""
        },
        {
          "name": "precipitationAmount",
          "type": "number",
          "description": "Количество осадков, мм"
        },
        {
          "name": "measurementDateTime",
          "type": "string",
          "description": "Дата и время измерения погодных условий в формате ISO-8601"
        },
        {
          "name": "weatherForecast",
          "type": "array",
          "description": "Массив идентификаторов объектов с прогнозом погоды на ближайшие дни"
        }
      ]
    },
    "statuses": [
      {
        "code": 200,
        "description": "Запрос успешно выполнен и запись о погоде в регионе добавлена."
      },
      {
        "code": 400,
        "description": "Один из следующих случаев: Некорректный идентификатор региона (regionId <= 0). Дата и время измерения погодных условий не в формате ISO-8601. Температура или скорость ветра отрицательные. Неверное состояние погоды. Количество осадков отрицательное."
      },
      {
        "code": 401,
        "description": "Неверные авторизационные данные."
      },
      {
        "code": 404,
        "description": "Регион с указанным идентификатором не найден или прогноз погоды для данного региона не найден."
      }
    ],
    "example_request": "POST /region/weather HTTP/1.1\nContent-Type: application/json\n\n{\n  \"regionId\": 123,\n  \"temperature\": 25.5,\n  \"humidity\": 60.0,\n  \"windSpeed\": 3.0,\n  \"weatherCondition\": \"CLEAR\",\n  \"precipitationAmount\": 0.0,\n  \"measurementDateTime\": \"2024-04-14T12:00:00Z\",\n  \"weatherForecast\": [456, 789]\n}",
    "example_response": "{\n  \"id\": 987,\n  \"temperature\": 25.5,\n  \"humidity\": 60.0,\n  \"windSpeed\": 3.0,\n  \"weatherCondition\": \"CLEAR\",\n  \"precipitationAmount\": 0.0,\n  \"measurementDateTime\": \"2024-04-14T12:00:00Z\",\n  \"weatherForecast\": [\n    456,\n    789\n  ]\n}"
  },
  {
    "title": "PUT - /region/weather/{regionId}",
    "path": "/region/weather/{regionId}",
    "method": "PUT",
    "description": "Изменение погоды в регионе",
    "request": {
      "description": "Принимает JSON-объект с полями:",
      "fields": [
        {
          "name": "regionId",
          "type": "integer",
          "description": "Идентификатор региона"
        },
        {
          "name": "temperature",
          "type": "number",
          "description": "Температура в регионе, °C"
        },
        {
          "name": "humidity",
          "type": "number",
          "description": "Влажность воздуха в регионе, %"
        },
        {
          "name": "windSpeed",
          "type": "number",
          "description": "Скорость ветра, м/с"
        },
        {
          "name": "weatherCondition",
          "type": "string",
          "description": "Текущее состояние погоды: \"CLEAR\", \"CLOUDY\", \"RAIN\", \"SNOW\", \"FOG\", \"STORM\""
        },
        {
          "name": "precipitationAmount",
          "type": "number",
          "description": "Количество осадков, мм"
        },
        {
          "name": "measurementDateTime",
          "type": "string",
          "description": "Дата и время измерения погодных условий в формате ISO-8601"
        },
        {
          "name": "weatherForecast",
          "type": "array",
          "description": "Массив идентификаторов объектов с прогнозом погоды на ближайшие дни"
        }
      ]
    },
    "response": {
      "description": "Отправляет JSON-объект с полями:",
      "fields": [
        {
          "name": "id",
          "type": "integer",
          "description": "Уникальный идентификатор созданной записи о погоде в регионе"
        },
        {
          "name": "temperature",
          "type": "number",
          "description": "Температура в регионе, °C"
        },
        {
          "name": "humidity",
          "type": "number",
          "description": "Влажность воздуха в регионе, %"
        },
        {
          "name": "windSpeed",
          "type": "number",
          "description": "Скорость ветра, м/с"
        },
        {
          "name": "weatherCondition",
          "type": "string",
          "description": "Текущее состояние погоды: \"CLEAR\", \"CLOUDY\", \"RAIN\", \"SNOW\", \"FOG\", \"STORM\""
        },
        {
          "name": "precipitationAmount",
          "type": "number",
          "description": "Количество осадков, мм"
        },
        {
          "name": "measurementDateTime",
          "type": "string",
          "description": "Дата и время измерения погодных условий в формате ISO-8601"
        },
        {
          "name": "weatherForecast",
          "type": "array",
          "description": "Массив идентификаторов объектов с прогнозом погоды на ближайшие дни"
        }
      ]
    },
    "statuses": [
      {
        "code": 200,
        "description": "Запрос успешно выполнен и запись о погоде в регионе изменена."
      },
      {
        "code": 400,
        "description": "Один из следующих случаев: Некорректный идентификатор региона (regionId <= 0). Дата и время измерения погодных условий не в формате ISO-8601. Температура или скорость ветра отрицательные. Неверное состояние погоды. Количество осадков отрицательное."
      },
      {
        "code": 401,
        "description": "Неверные авторизационные данные."
      },
      {
        "code": 404,
        "description": "Регион с указанным идентификатором не найден или прогноз погоды для данного региона не найден."
      }
    ],
    "example_request": "PUT /region/weather/123 HTTP/1.1\nContent-Type: application/json\n\n{\n  \"regionId\": 123,\n  \"temperature\": 25.5,\n  \"humidity\": 60.2,\n  \"windSpeed\": 3.4,\n  \"weatherCondition\": \"CLEAR\",\n  \"precipitationAmount\": 0,\n  \"measurementDateTime\": \"2024-04-15T08:00:00Z\",\n  \"weatherForecast\": [\n    456,\n    789\n  ]\n}",
    "example_response": "{\n  \"id\": 987,\n  \"temperature\": 25.5,\n  \"humidity\": 60.2,\n  \"windSpeed\": 3.4,\n  \"weatherCondition\": \"CLEAR\",\n  \"precipitationAmount\": 0,\n  \"measurementDateTime\": \"2024-04-15T08:00:00Z\",\n  \"weatherForecast\": [\n    456,\n    789\n  ]\n}"
  },
  {
    "title": "DELETE - /region/weather/{regionId}",
    "path": "/region/weather/{regionId}",
    "method": "DELETE",
    "description": "Удаление погоды для региона",
    "request": {
      "description": "Отправляет пустое тело запроса."
    },
    "response": {
      "description": "Отправляет пустое тело ответа."
    },
    "statuses": [
      {
        "code": 200,
        "description": "Запрос успешно выполнен, и погода для указанного региона удалена."
      },
      {
        "code": 400,
        "description": "Один из следующих случаев: Идентификатор региона некорректный (regionId <= 0)."
      },
      {
        "code": 401,
        "description": "Неверные авторизационные данные."
      },
      {
        "code": 404,
        "description": "Регион с указанным идентификатором не найден."
      }
    ],
    "example_request": "DELETE /region/weather/123 HTTP/1.1",
    "example_response": "{}"
  },
  {
    "title": "POST - /region/{regionId}/weather/{weatherId}",
    "path": "/region/{regionId}/weather/{weatherId}",
    "method": "POST",
    "description": "Добавление погоды для конкретного региона",
    "request": {
      "description": "Отправляет пустое тело запроса."
    },
    "response": {
      "id": "long",
      "regionId": "long",
      "regionName": "string",
      "temperature": "float",
      "humidity": "float",
      "windSpeed": "float",
      "weatherCondition": "string",
      "precipitationAmount": "float",
      "measurementDateTime": "dateTime",
      "weatherForecast": "array"
    },
    "statuses": [
      {
        "code": 200,
        "description": "Запрос успешно выполнен."
      },
      {
        "code": 400,
        "description": "Один из следующих случаев: Идентификатор региона некорректный (regionId <= 0). Идентификатор погоды некорректный (weatherId <= 0)."
      },
      {
        "code": 401,
        "description": "Неверные авторизационные данные."
      },
      {
        "code": 404,
        "description": "Регион с указанным идентификатором не найден, или погода для указанного региона и идентификатора не найдена."
      }
    ],
    "example_request": "POST /region/123/weather/456 HTTP/1.1",
    "example_response": "{\n  \"id\": 123,\n  \"regionId\": 123,\n  \"regionName\": \"Название региона\",\n  \"temperature\": 25.0,\n  \"humidity\": 50.0,\n  \"windSpeed\": 10.0,\n  \"weatherCondition\": \"CLEAR\",\n  \"precipitationAmount\": 0.0,\n  \"measurementDateTime\": \"2024-04-16T12:00:00Z\",\n  \"weatherForecast\": [\n    789,\n    790\n  ]\n}"
  },
  {
    "title": "DELETE - /region/{regionId}/weather/{weatherId}",
    "path": "/region/{regionId}/weather/{weatherId}",
    "method": "DELETE",
    "description": "Удаление погоды для региона",
    "request": {
      "description": "Отправляет пустое тело запроса."
    },
    "response": {
      "id": "long",
      "name": "string",
      "parentRegion": "string",
      "latitude": "double",
      "longitude": "double"
    },
    "statuses": [
      {
        "code": 200,
        "description": "Запрос успешно выполнен."
      },
      {
        "code": 400,
        "description": "Один из следующих случаев: Идентификатор региона некорректный (regionId <= 0). Идентификатор погоды некорректный (weatherId <= 0)."
      },
      {
        "code": 401,
        "description": "Неверные авторизационные данные."
      },
      {
        "code": 404,
        "description": "Регион с указанным идентификатором не найден."
      }
    ],
    "example_request": "DELETE /region/123/weather/456 HTTP/1.1",
    "example_response": "{\n  \"id\": 123,\n  \"name\": \"Название региона\",\n  \"parentRegion\": \"Название родительского региона\",\n  \"latitude\": 50.0,\n  \"longitude\": 30.0\n}"
  },
  {
    "title": "GET - /region/weather/forecast/{forecastId}",
    "path": "/region/weather/forecast/{forecastId}",
    "method": "GET",
    "description": "Получение информации о прогнозе погоды",
    "request": {
      "description": "Отправляет пустое тело запроса."
    },
    "response": {
      "id": "long",
      "dateTime": "dateTime",
      "temperature": "float",
      "weatherCondition": "string",
      "regionId": "long"
    },
    "statuses": [
      {
        "code": 200,
        "description": "Запрос успешно выполнен."
      },
      {
        "code": 400,
        "description": "Один из следующих случаев: Идентификатор прогноза погоды не указан (forecastId = null). Дата и время прогноза не в формате ISO-8601. Состояние погоды не валидно. Идентификатор прогноза погоды меньше или равен нулю (forecastId <= 0)."
      },
      {
        "code": 401,
        "description": "Неверные авторизационные данные."
      },
      {
        "code": 404,
        "description": "Прогноза погоды с указанным идентификатором не существует."
      }
    ],
    "example_request": "GET /region/weather/forecast/{forecastId} HTTP/1.1",
    "example_response": "{\n  \"id\": 123,\n  \"dateTime\": \"2024-04-15T12:00:00Z\",\n  \"temperature\": 20.5,\n  \"weatherCondition\": \"CLEAR\",\n  \"regionId\": 456\n}"
  },
  {
    "title": "PUT - /region/weather/forecast/{forecastId}",
    "path": "/region/weather/forecast/{forecastId}",
    "method": "PUT",
    "description": "Изменение прогноза погоды",
    "request": {
      "temperature": "float",
      "weatherCondition": "string",
      "dateTime": "dateTime"
    },
    "response": {
      "id": "long",
      "dateTime": "dateTime",
      "temperature": "float",
      "weatherCondition": "string",
      "regionId": "long"
    },
    "statuses": [
      {
        "code": 200,
        "description": "Запрос успешно выполнен."
      },
      {
        "code": 400,
        "description": "Один из следующих случаев: Идентификатор прогноза погоды не указан (forecastId = null). Дата и время прогноза не в формате ISO-8601. Состояние погоды не валидно. Идентификатор прогноза погоды меньше или равен нулю (forecastId <= 0)."
      },
      {
        "code": 401,
        "description": "Неверные авторизационные данные."
      },
      {
        "code": 404,
        "description": "Прогноза погоды с указанным идентификатором не существует."
      }
    ],
    "example_request": "PUT /region/weather/forecast/{forecastId} HTTP/1.1\nContent-Type: application/json\n\n{\n  \"temperature\": 25.5,\n  \"weatherCondition\": \"CLEAR\",\n  \"dateTime\": \"2024-04-16T12:00:00Z\"\n}",
    "example_response": "{\n  \"id\": 123,\n  \"dateTime\": \"2024-04-16T12:00:00Z\",\n  \"temperature\": 25.5,\n  \"weatherCondition\": \"CLEAR\",\n  \"regionId\": 456\n}"
  },
  {
    "title": "POST - /region/weather/forecast/",
    "path": "/region/weather/forecast/",
    "method": "POST",
    "description": "Добавление прогноза погоды",
    "request": {
      "regionId": "long",
      "dateTime": "dateTime",
      "temperature": "float",
      "weatherCondition": "string"
    },
    "response": {
      "id": "long",
      "regionId": "long",
      "temperature": "float",
      "weatherCondition": "string",
      "dateTime": "dateTime",
      "precipitationAmount": "float",
      "windSpeed": "float"
    },
    "statuses": [
      {
        "code": 200,
        "description": "Запрос успешно выполнен."
      },
      {
        "code": 400,
        "description": "Один из следующих случаев: Идентификатор региона не указан (regionId = null). Дата и время прогноза не в формате ISO-8601. Состояние погоды не валидно. Идентификатор региона меньше или равен нулю (regionId <= 0)."
      },
      {
        "code": 401,
        "description": "Неверные авторизационные данные."
      },
      {
        "code": 404,
        "description": "Региона с указанным идентификатором не существует."
      }
    ],
    "example_request": "POST /region/weather/forecast/ HTTP/1.1\nContent-Type: application/json\n\n{\n  \"regionId\": 123,\n  \"dateTime\": \"2024-04-16T12:00:00Z\",\n  \"temperature\": 25.5,\n  \"weatherCondition\": \"CLEAR\"\n}",
    "example_response": "{\n  \"id\": 456,\n  \"regionId\": 123,\n  \"temperature\": 25.5,\n  \"weatherCondition\": \"CLEAR\",\n  \"dateTime\": \"2024-04-16T12:00:00Z\",\n  \"precipitationAmount\": 10.2,\n  \"windSpeed\": 3.4\n}"
  },
  {
    "title": "Удаление прогноза погоды",
    "method": "DELETE",
    "path": "/region/weather/forecast/{forecastId}",
    "request": {
      "description": "Отправляет пустое тело запроса."
    },
    "response": {
      "description": "Отправляет пустое тело ответа."
    },
    "statuses": [
      {
        "code": 200,
        "description": "Запрос успешно выполнен, и прогноз погоды удален."
      },
      {
        "code": 400,
        "description": "Один из следующих случаев: Идентификатор прогноза погоды некорректный (forecastId <= 0)."
      },
      {
        "code": 401,
        "description": "Неверные авторизационные данные."
      },
      {
        "code": 404,
        "description": "Прогноз погоды с указанным идентификатором не найден."
      }
    ],
    "example_request": "DELETE /region/weather/forecast/123 HTTP/1.1",
    "example_response": "HTTP/1.1 200 OK"
  }
]